package org.liang.job;

import java.util.List;

import org.liang.job.beans.Job;
import org.quartz.SchedulerException;

/**
 * <strong>自动任务更新器.</strong>
 * 
 * <pre>
 * 提供一下行为：
 * 1 添加任务
 * 2 刷新任务
 * 3 添加任务（批量）
 * 4 暂停指定任务
 * 5 暂停指定组内的任务
 * 6 恢复指定任务
 * 7 恢复指定组内的任务
 * 8 删除指定任务
 * 9 删除指定组内的任务
 * 10 暂停指定触发器
 * 11 暂停指定组内的触发器
 * 12 恢复指定触发器
 * 13 恢复指定组内的触发器
 * 14 移除指定触发器
 * 15 移除指定组内的触发器
 * </pre>
 * 
 * @author L.Yang
 * @version 1.0, 2015年9月24日
 */
public interface SchedulerUpdater {

    /**
     * 添加任务.
     * 
     * @param job
     *            任务实例
     */
    void schedule(Job job) throws SchedulerException;

    /**
     * 添加任务.<br>
     * job实例中的id会在保存过程中自动生成
     * 
     * @param jobs
     *            任务实例
     */
    void schedule(List<Job> jobs) throws SchedulerException;
    
    /**
     * 刷新任务.
     * 
     * @param job
     *            任务实例
     */
    void reschedule(Job job) throws SchedulerException;

    /**
     * 对指定任务进行 触发 (execute it now).
     * 
     * @param name
     *            任务
     * @param group
     *            任务组
     */
    void triggerJob(String name, String group);
    
    /**
     * 对指定任务进行 暂停.
     * 
     * @param name
     *            任务
     * @param group
     *            任务组
     */
    void pauseJob(String name, String group);

    /**
     * 对指定组的任务进行暂停.
     * 
     * @param group
     *            任务组
     */
    void pauseJobs(String group);

    /**
     * 恢复指定任务.
     * 
     * @param name
     *            任务名
     * @param group
     *            任务组
     */
    void resumeJob(String name, String group);

    /**
     * 对指定组的任务进行恢复.
     * 
     * @param group
     *            任务组
     */
    void resumeJobs(String group);

    /**
     * 删除指定任务.
     * 
     * @param name
     *            任务名
     * @param group
     *            任务组
     * @return true:成功, false:失败
     */
    boolean deleteJob(String name, String group);

    /**
     * 删除指定组中的任务.
     * 
     * @param group
     *            指定组的任务
     * @return 一个或多个失败则返回失败
     */
    boolean deleteJobs(String group);

    /**
     * 暂停指定触发器.
     * 
     * @param name
     *            触发器名
     * @param group
     *            触发器组
     */
    void pauseTrigger(String name, String group);

    /**
     * 暂停指定组的触发器.
     * 
     * @param group触发器组
     */
    void pauseTriggers(String group);

    /**
     * 恢复指定触发器.
     * 
     * @param name
     *            触发器名称
     * @param group
     *            触发器组
     */
    void resumeTrigger(String name, String group);

    /**
     * 恢复指定组的触发器.
     * 
     * @param group
     *            触发器组
     */
    void resumeTriggers(String group);

    /**
     * 删除触发器.
     * 
     * @param name
     *            触发器名称
     * @param group
     *            触发器组
     * @return true:成功, false:失败
     */
    boolean removeTrigger(String name, String group);

    /**
     * 删除指定组的触发器.
     * 
     * @param group
     *            触发器组
     * @return 一个或多个失败则返回失败
     */
    boolean removeTriggers(String group);

}
